package com.jingjiu.homeservicesbiz.service;

import java.util.ArrayList;
import java.util.List;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jingjiu.homeservicesapi.Vo.ForumVo;
import com.jingjiu.homeservicesapi.domain.ForumComment;
import com.jingjiu.homeservicesapi.domain.ForumPost;
import com.jingjiu.homeservicesbiz.mapper.ForumPostMapper;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;



/**
 * 论坛帖子：记录用户发布的内容Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-04-16
 */
@Service
public class ForumPostServiceImpl extends ServiceImpl<ForumPostMapper,ForumPost>
{
    @Autowired
    private ForumPostMapper forumPostMapper;



    public List<ForumVo> selectForumPostList() {

        List<ForumVo> forumVoList = new ArrayList<>();
        // 创建查询条件

        List<ForumPost> forumPostList = this.list();
        // 遍历查询结果，将ForumPost对象转换为ForumVo对象
        for (ForumPost post : forumPostList) {
            ForumVo forumVo = new ForumVo();
            forumVo.setForumPost(post);
            List<ForumComment> forumComments = selectByPostIdForumComments(post.getId());
            forumVo.setForumComment(forumComments);
            forumVoList.add(forumVo);
        }

        return forumVoList;
    }


    public List<ForumComment> selectByPostIdForumComments(Long postId) {
        return forumPostMapper.selectByPostIdForumComments(postId);
    }



    /**
     * 论坛帖子分页查询：记录用户发布的内容
     *
     * @param page       分页对象
     * @param forumPost  查询条件
     * @return 分页结果
     */
    public Page<ForumPost> selectPage(Page<ForumPost> page, ForumPost forumPost) {
        // 创建查询条件
        LambdaQueryWrapper<ForumPost> queryWrapper = new LambdaQueryWrapper<>();

        // 根据查询条件设置模糊查询
        if (StringUtils.isNotBlank(forumPost.getContent())) {
            queryWrapper.like(ForumPost::getContent, forumPost.getContent());
        }

        if (StringUtils.isNotBlank(forumPost.getAuthorName())) {
            queryWrapper.like(ForumPost::getAuthorName, forumPost.getAuthorName());
        }

        if (StringUtils.isNotBlank(forumPost.getImageUrl())) {
            queryWrapper.like(ForumPost::getImageUrl, forumPost.getImageUrl());
        }

        // 添加排序，按发布时间降序排序
        queryWrapper.orderByDesc(ForumPost::getCreatedAt);

        // 使用 MyBatis-Plus 提供的分页查询
        return this.page(page, queryWrapper);
    }

    /**
     * 查询论坛帖子：记录用户发布的内容
     * 
     * @param id 论坛帖子：记录用户发布的内容主键
     * @return 论坛帖子：记录用户发布的内容
     */

    public ForumPost selectForumPostById(Long id)
    {
        return forumPostMapper.selectForumPostById(id);
    }

    /**
     * 查询论坛帖子：记录用户发布的内容列表
     * 
     * @param forumPost 论坛帖子：记录用户发布的内容
     * @return 论坛帖子：记录用户发布的内容
     */
/*

    public List<ForumPost> selectForumPostList(ForumPost forumPost)
    {
        return forumPostMapper.selectForumPostList(forumPost);
    }
*/

    /**
     * 新增论坛帖子：记录用户发布的内容
     * 
     * @param forumPost 论坛帖子：记录用户发布的内容
     * @return 结果
     */

    public int insertForumPost(ForumPost forumPost)
    {
        return forumPostMapper.insertForumPost(forumPost);
    }

    /**
     * 修改论坛帖子：记录用户发布的内容
     * 
     * @param forumPost 论坛帖子：记录用户发布的内容
     * @return 结果
     */

    public int updateForumPost(ForumPost forumPost)
    {
        return forumPostMapper.updateForumPost(forumPost);
    }

    /**
     * 批量删除论坛帖子：记录用户发布的内容
     * 
     * @param ids 需要删除的论坛帖子：记录用户发布的内容主键
     * @return 结果
     */


    /**
     * 删除论坛帖子：记录用户发布的内容信息
     * 
     * @param id 论坛帖子：记录用户发布的内容主键
     * @return 结果
     */

    public int deleteForumPostById(Long id)
    {
      int n = baseMapper.deleteForumPostById(id);
      if(n>0) baseMapper.deleteCommentByPostId(id);
       return n;
    }

    public List<ForumPost> searchByTitle(String title) {
        return forumPostMapper.searchByTitle(title);
    }
}
